import axios, { AxiosError, AxiosResponse } from 'axios';

// 区分开发环境还是生产环境基础URL
export const basicUrl = import.meta.env.VITE_APP_BASE_URL;

//设置axios基础路径
const request = axios.create({
  baseURL: basicUrl,
});

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    // 每次发送请求之前本地存储中是否存在token，也可以通过Redux这里只演示通过本地拿到token
    // 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
    // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
    const token = localStorage.getItem('userToken');
    //设置请求头
    config.headers?.set('Content-Type', 'application/json; charset=utf-8');
    config.headers?.set('Authorization', token ? token : '');

    return config;
  },
  (error) => {
    return error;
  }
);

// 响应拦截器
request.interceptors.response.use(
  (response: AxiosResponse) => {
    const { code, msg } = response.data;
    if (code === 200) {
      return response.data;
    } else if (code === 401) {
      console.log('msg', msg);
      if(msg !== '用户名或密码错误!' && msg !=='账户已锁定，请联系管理员!') {
        window.location.href = '/#/leave/login';
      }
      return response.data;
    } else {
      return Promise.reject(new Error(msg));
    }
  },
  (error: AxiosError) => {
    return Promise.reject(error);
  }
);
export default request;
